package cn.wolfcode.wolf2w.util;

import cn.wolfcode.wolf2w.domain.Region;
import cn.wolfcode.wolf2w.query.QueryObject;
import org.springframework.data.domain.*;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.core.query.Query;

import java.util.List;

/**
 * 数据库操作工具类
 */
public class DBHelper {

    public static <T> Page<T> query(MongoTemplate template, QueryObject qo, Query query, Pageable pageable, Class<T> clz) {

        // 查询总条数，传入Region.class告诉template对象查询哪个集合
        long total = template.count(query, clz);
        // 总条数为0,返回空集合数据, 避免空指针
        if (total == 0){
            return Page.empty();
        }
        // 删除当前页最后一条数据时 回退上一页
        if(total <= (qo.getCurrentPage() - 1) * qo.getPageSize()) {
            qo.setCurrentPage(qo.getCurrentPage() <= 1 ? 1 : qo.getCurrentPage() -1);
        }
        query.with(pageable);
        // 执行查询, 返回list数据
        List<T> list = template.find(query, clz);
        // 使用PageImpl, spring-data提供, 传入list数据, pageable查询条件, total总条数
        return new PageImpl(list, pageable, total);
    }

}
